# /usr/bin/env python3.6
# -*- encoding: utf-8 -*-
"""
@File    : movie_order_pay_api.py
@Time    : 2020/2/10 0010 17:38
@Author  : zhangbing
@Email   : 18829172841@163.com
@Software: PyCharm
"""
import random

from App.models.cinema_admin.cinma_hall_movie_model import HallMovie
from App.models.common.movie_model import Movie
from App.models.movie_user.movie_order_model import MovieOrder

'''
支付 
    如何确保付款 
        核心逻辑第三方平台不会暴露
        直接和支付平台对接的是客户端
        客户端可以返回给服务端一个支付状态 
        还要有一个确保策略
        接受支付宝的回调
            notify_url
                已付款确认就是客户端告诉你成功，但是还没有收到支付宝的回调
    
    
    支付：
        和Django 相同 
        支付注意配置支付账号信息
        支付的时候调用指定客户端
            1 web
            2 phone 
            区别是调用接口不同，参数都一样
                使用库封装了，对应的就是函数名不一样
        确认支付结果
            接受支付宝的回调
'''
from flask_restful import Resource, reqparse
from alipay import AliPay

from App.apis.api_constant import HTTP_OK
from App.apis.movie_user.utils import login_required
from App.setting import ALIPAY_APPID, APP_PRIVATE_KEY, ALIPAY_PUBLIC_KEY

parse = reqparse.RequestParser()

parse.add_argument("order_id", type=int, required=True, help="Plase  input order_id")
parse.add_argument("uname", type=str, required=True, help="Plase  input   uname")
parse.add_argument("sumprice", type=float, required=True, help="Plase  input   price")


class MovieOrderPayResource(Resource):
    @login_required
    def get(self):
        alipay = AliPay(
            appid=ALIPAY_APPID,
            app_notify_url=None,  # 默认回调url
            app_private_key_string=APP_PRIVATE_KEY,
            # 支付宝的公钥，验证支付宝回传消息使用，不是你自己的公钥,
            alipay_public_key_string=ALIPAY_PUBLIC_KEY,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=False  # 默认False
        )
        # 如果你是Python 2用户（考虑考虑升级到Python 3吧），请确保非ascii的字符串为utf8编码：
        args = parse.parse_args()
        order_id = args.get("order_id")
        uname = args.get("uname")
        sumprice = args.get("sumprice")
        subject = uname

        # 电脑网站支付，需要跳转到https://openapi.alipay.com/gateway.do? + order_string
        order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=random.randint(5000, 10000),
            total_amount=sumprice,
            subject=subject,
            return_url="http://www.1000phone.com",
            notify_url="http://www.1000phone.com"  # 可选, 不填则使用默认notify url
        )

        # 客户端软件
        pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string

        # data = {
        #     "msg": "ok",
        #     "STATUS": HTTP_OK,
        #     "data": {
        #         "uname": uname,
        #         "pay_url": pay_url,
        #         "order_id": order_id,
        #         "pay": sumprice
        #     }
        # }
        return pay_url.join()

    if __name__ == "__main__":
        pass
